package TouristManagementBO.TransportSystem;

import org.omg.CosNaming.NamingContext;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;


public class TransportSystemServerThread extends Thread{
	
	String nomSystem;
	
	public TransportSystemServerThread(String nomSystem){
		this.nomSystem = nomSystem;
	}
	
	public void run()
	{
		try {		
		        // Intialisation de l'ORB
		        //************************
				
				String[] args = null;
			
				org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);

		        // Gestion du POA
		        //****************
		        // Recuperation du POA
		        POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

		        // Creation du servant
		        //*********************
		        TransportSystemImpl leSystem = new TransportSystemImpl(nomSystem);
		        
		        // Activer le servant au sein du POA et recuperer son ID
		        rootPOA.activate_object(leSystem);

		        // Activer le POA manager
		        rootPOA.the_POAManager().activate();

		
		        // Enregistrement dans le service de nommage
		        //*******************************************
		        // Recuperation du naming service
		        NamingContext nameRoot=org.omg.CosNaming.NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));

		        // Construction du nom a enregistrer
		        org.omg.CosNaming.NameComponent[] nameToRegister = new org.omg.CosNaming.NameComponent[1];
		        //enregister dans le Naming service
		        nameToRegister[0] = new org.omg.CosNaming.NameComponent(nomSystem,"");

		        // Enregistrement de l'objet CORBA dans le service de noms
		        nameRoot.rebind(nameToRegister,rootPOA.servant_to_reference(leSystem));		
		        System.out.println("Transport system "+nomSystem+ " created.");
		        
		        // Lancement de l'ORB et mise en attente de requete
		        //**************************************************
		        orb.run();
		    }
			catch (Exception e) {
				e.printStackTrace();
			}
		}

}
